/**
 * 腾讯翻译服务模块
 * 用于药物名称的中英文翻译
 */

// 请在环境变量或配置文件中设置以下参数
const TENCENT_TRANSLATE_CONFIG = {
  endpoint: 'https://tmt.tencentcloudapi.com',
  region: 'ap-guangzhou', // 可根据需要修改区域
  secretId: import.meta.env.VITE_TENCENT_SECRET_ID || '', // 从环境变量获取
  secretKey: import.meta.env.VITE_TENCENT_SECRET_KEY || ''  // 从环境变量获取
};

/**
 * 翻译文本
 * @param text 待翻译文本
 * @param targetLang 目标语言 ('zh' 或 'en')
 * @returns 翻译后的文本
 */
export async function translateText(text: string, targetLang: 'zh' | 'en' = 'zh'): Promise<string> {
  if (!text.trim()) {
    return text;
  }

  // 开发环境下模拟翻译
  if (import.meta.env.DEV && !TENCENT_TRANSLATE_CONFIG.secretId) {
    console.warn('腾讯翻译API密钥未配置，使用模拟翻译');
    return targetLang === 'zh' ? `[中文]${text}` : `[EN]${text}`;
  }

  try {
    const sourceLang = targetLang === 'zh' ? 'en' : 'auto';
    
    const params = {
      Action: 'TextTranslate',
      Version: '2018-03-21',
      SourceText: text,
      Source: sourceLang,
      Target: targetLang,
      ProjectId: 0
    };

    // 构建请求签名（简化版本，实际应用中需要完整实现腾讯云签名算法）
    const url = new URL(TENCENT_TRANSLATE_CONFIG.endpoint);
    
    const response = await fetch(url.toString(), {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'X-TC-Action': params.Action,
        'X-TC-Version': params.Version,
        'X-TC-Region': TENCENT_TRANSLATE_CONFIG.region,
        'X-TC-Timestamp': Math.floor(Date.now() / 1000).toString(),
        'X-TC-RequestClient': 'SDK_Javascript_3.0.465'
        // 注意：生产环境需要实现完整的签名认证
      },
      body: JSON.stringify(params)
    });

    if (!response.ok) {
      throw new Error(`翻译请求失败: ${response.status}`);
    }

    const data = await response.json();
    
    if (data.Response && data.Response.TargetText) {
      return data.Response.TargetText;
    }

    throw new Error('翻译响应格式错误');
  } catch (error) {
    console.error('腾讯翻译服务出错:', error);
    throw error;
  }
}

// rxnormService.ts
// 用于与RxNorm API通信的服务模块

const BASE_URL = 'https://rxnav.nlm.nih.gov/REST';

import tencentTranslateService from './tencentTranslateService';

/**
 * 根据药物名称获取近似的RxNorm概念
 * @param drugName 药物名称
 * @param maxEntries 最大返回条目数，默认为5
 * @returns Promise包含匹配的药物概念
 */
export async function getApproximateMatch(drugName: string, maxEntries: number = 5) {
  try {
    const encodedDrugName = encodeURIComponent(drugName);
    const response = await fetch(
      `${BASE_URL}/approximateTerm.json?term=${encodedDrugName}&maxEntries=${maxEntries}`
    );
    
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('获取RxNorm近似匹配时出错:', error);
    throw error;
  }
}

/**
 * 根据RxNorm概念ID获取详细信息
 * @param rxcui RxNorm概念ID
 * @returns Promise包含药物详细信息
 */
export async function getDrugDetails(rxcui: string) {
  try {
    const response = await fetch(`${BASE_URL}/rxcui/${rxcui}.json`);
    
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('获取药物详细信息时出错:', error);
    throw error;
  }
}

/**
 * 根据药物名称获取RxNorm概念
 * @param drugName 药物名称
 * @param allsrc 是否搜索所有来源(0=仅当前，1=所有来源)
 * @returns Promise包含匹配的药物概念
 */
export async function getRxConcepts(drugName: string, allsrc: number = 0) {
  try {
    const encodedDrugName = encodeURIComponent(drugName);
    const response = await fetch(
      `${BASE_URL}/rxcui.json?name=${encodedDrugName}&allsrc=${allsrc}`
    );
    
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('获取RxNorm概念时出错:', error);
    throw error;
  }
}

/**
 * 获取药物的所有相关信息
 * @param rxcui RxNorm概念ID
 * @returns Promise包含药物的所有相关信息
 */
export async function getAllRelatedInfo(rxcui: string) {
  try {
    const response = await fetch(`${BASE_URL}/rxcui/${rxcui}/allrelated.json`);
    
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    
    const data = await response.json();
    return data;
  } catch (error) {
    console.error('获取药物相关信息时出错:', error);
    throw error;
  }
}

/**
 * 获取药物的显示名称（使用腾讯翻译API进行翻译）
 * @param rxcui RxNorm概念ID
 * @returns Promise包含药物的显示名称
 */
export async function getDisplayName(rxcui: string): Promise<string | null> {
  try {
    const response = await fetch(`${BASE_URL}/rxcui/${rxcui}/allProperties.json?prop=names`);
    
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    
    const data = await response.json();
    
    if (data && data.propConceptGroup && data.propConceptGroup.propConcept) {
      // 获取第一个名称作为显示名称
      const displayName = data.propConceptGroup.propConcept[0].propValue;
      
      // 如果名称是英文，尝试翻译为中文
      if (displayName && /^[A-Za-z\s]+$/.test(displayName)) {
        try {
          const translatedName = await tencentTranslateService.translateText(displayName, 'zh');
          // 验证翻译结果是否合理（包含中文字符且长度大于1）
          if (translatedName && /[\u4e00-\u9fa5]/.test(translatedName) && translatedName.length > 1) {
            // 额外检查是否为无意义的翻译结果
            const unreasonableTranslations = ['的', '了', '在', '是', '有', '和', '或', '但', '而', '然', '即', '若', '如', '为', '以', '所', '且', '也', '就', '便', '才', '可', '个', '种', '类', '型', '性', '化', '剂', '素', '液', '片', '针', '丸', '散', '膏', '丹', '胶', '膜', '栓', '带', '管', '盒', '瓶', '包', '汀'];
            const trimmedName = translatedName.trim();
            if (trimmedName.length <= 2 && unreasonableTranslations.includes(trimmedName)) {
              console.warn(`药物名称翻译结果 "${trimmedName}" 可能无意义，使用原始名称: "${displayName}"`);
              return displayName;
            }
            return translatedName;
          } else {
            console.warn(`药物名称翻译结果不合理 "${translatedName}"，使用原始名称: "${displayName}"`);
            return displayName;
          }
        } catch (translationError) {
          console.error('翻译药物名称时出错:', translationError);
          return displayName;
        }
      }
      
      return displayName;
    }
    
    return null;
  } catch (error) {
    console.error('获取药物显示名称时出错:', error);
    throw error;
  }
}

export default {
  getApproximateMatch,
  getDrugDetails,
  getRxConcepts,
  getAllRelatedInfo,
  getDisplayName
};